package com.wll.study.algotiyhm.about_sort;

/**
 * 选择排序
 */
public class SelectSort {
    /**
     * 选择排序第一版
     * @param arr 要排序的数组
     * @return 排序完的数组
     */
    public static int[] selectSort1(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            for (int j = i ; j < arr.length; j++) {
                if (arr[j]<arr[i]){     // 如果发现小于i的 就交换两个元素的内容
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }

            }
        }
        return arr;
    }

    /**
     * 选择排序第二版 优化了频繁交换元素
     * @param arr 要排序的数组
     * @return 排序完的数组
     */
    public static int[] selectSort2(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            int k = i;  // 临时记录外层循环的下标
            for (int j = i+1; j < arr.length; j++) {
                if (arr[j]<arr[i]){
                    k = j ;// 发现比外层更小的数 修改k的指向
                }
            }
            // 内层循环结束 k就是内层循环的最小元素 此时交换k和i的值
            if (k!=i){
                int temp = arr[i];
                arr[i] = arr[k];
                arr[k] = temp;
            }
        }
        return arr;  // 返回最终数据
    }

}
